/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.cliente;

import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.TipoDocumento;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.model.SelectItem;

/**
 *
 * @author guicosi
 */
public class ClienteBean {

    @EJB
    private IClienteService clienteService;

    private Cliente cliente = new Cliente();
    private String numeroDoc;
    private List<Cliente> listaCliente;
    private String ultimaBusqueda="NN"; // guarda cual fue la última busqueda realizada para repetrila

    public ClienteBean() {
        //this.clienteService = new ClientesServiceMock();
        //this.listaCliente = clienteService.findAll();
    }

    public String getNumeroDoc() {
        return numeroDoc;
    }

    public void setNumeroDoc(String numeroDoc) {
        this.numeroDoc = numeroDoc;
    }

    public String add() {
        clienteService.add(cliente);
        this.cliente = new Cliente();
        repetriBusqueda();
        return "success";
    }

    public String delete() {
        try {
            this.cliente = clienteService.findClienteById(this.numeroDoc);
            clienteService.remove(cliente);
            this.cliente = new Cliente();
            repetriBusqueda();
        } catch (Exception e) {
            return "failed";
        }
        return "success";
    }

    /**
     * retorna los registros que cumplan con el criterio de busqueda por documento indicado
     * @param pNombre
     * @return
     */
    public String getClienteByDocumento() {
        try {
            this.cliente = clienteService.findClienteById(this.numeroDoc);
            if (this.cliente != null) {
                return "modificar";
            } else {
                return "noexiste";
            }
        } catch (Exception e) {
            return "failed";
        }

    }

    
    public List getClientes() {
        //this.listaCliente = clienteService.findAll();
        return this.listaCliente;
    }


    @PostConstruct
    public void getAllClientes() {
        this.listaCliente = clienteService.findAll();
        this.ultimaBusqueda = "AC";
    }

    public void getClientesByDocumento() {
        this.listaCliente = (List<Cliente>) clienteService.findClienteByIdToGrid(this.cliente.getNumeroDocumento());
        this.ultimaBusqueda = "BD";
    }

    /**
     * retorna los registros que cumplan con el criterio de busqueda por nombre indicado
     * @param pNombre
     * @return
     */
    public void getClientesByNombre() {
        this.listaCliente = clienteService.findClienteByNombre(this.cliente.getNombreCliente());
        this.ultimaBusqueda = "BN";
    }

    /**
     * retorna los registros que cumplan con el criterio de busqueda por documento indicado
     * @param pNombre
     * @return
     */
    public void getClientesByEmail() {
        this.listaCliente = (List<Cliente>) clienteService.findClienteByEmail(this.cliente.getEmail());
        this.ultimaBusqueda = "BE";
    }

    public void getClientesByTipo() {
        this.listaCliente = (List<Cliente>) clienteService.findClienteByTipoDocumento(this.cliente.getTipoDocumento());
        this.ultimaBusqueda = "BT";
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * retorna los tipos de documento disponibles
     * @return
     */
    public SelectItem[] getTiposDocumento() {
        TipoDocumento[] tipos = TipoDocumento.values();
        SelectItem[] sitems = new SelectItem[tipos.length];
        for (int i = 0; i < sitems.length; i++) {
            sitems[i] = new SelectItem(tipos[i]);
        }
        return sitems;
    }
/**
 * repite la ultima búsqueda realizada, con el fin de tener acualizada la lista
 */
    private void repetriBusqueda() {
        if (this.ultimaBusqueda.equals("BE")) {
            this.getClientesByEmail();
        } else if (this.ultimaBusqueda.equals("BD")) {
            this.getClientesByDocumento();
        } else if (this.ultimaBusqueda.equals("BN")) {
            this.getClientesByNombre();
        } else if (this.ultimaBusqueda.equals("BT")) {
            this.getClientesByTipo();
        } else {
            this.getAllClientes();
        }
    }
}
